/*
 * MaquinaEstados.java
 *
 * Created on 28 de marzo de 2007, 0:12
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes2007.tikitaka.tactica;

/**
 *
 * @author leamsi78
 */
public class MaquinaEstados {
    
    Object dueo;
    
    Estado estadoActual;
    Estado estadoPrevio;
    Estado estadoGlobal;
    
    /** Creates a new instance of MaquinaEstados */
    public MaquinaEstados(Object dueo) {
        this.dueo = dueo;
    }
    
    public void setEstadoActual(Estado estado)
    {
        estadoActual = estado;
    }
    
    public void setEstadoPrevio(Estado estado)
    {
        estadoPrevio = estado;
    }
    
    public void setEstadoGlobal(Estado estado)
    {
        estadoGlobal = estado;
    }
    
    public void actualizar()
    {
        if (estadoGlobal != null) 
            estadoGlobal.Ejecutar(dueo);
        
        if (estadoActual != null)
            estadoActual.Ejecutar(dueo);
    }
    
    public boolean recibirMensaje(Mensaje mensaje, Object d)
    {
        if (estadoActual != null && estadoActual.Mensaje(dueo, mensaje))
            return true;
        
        if (estadoGlobal != null && estadoGlobal.Mensaje(dueo, mensaje))
            return true;
        
        return false;
    }
    
    public void cambiarEstado(Estado nuevoEstado)
    {
        //Salimos del estado actual
        estadoActual.Salir(dueo);
        
        //El estado actual pasa a ser el estado previo
        estadoPrevio = estadoActual;
        
        //Asignamos el nuevo estado actual
        estadoActual = nuevoEstado;
        
        //Entramos en el nuevo estado actual
        estadoActual.Entrar(dueo);
    }
    
    public void volverEstadoAnterior()
    {
        cambiarEstado(estadoPrevio);
    }
    
    
}
